package com.srcptit.java.training.kienbd.btvn1;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

class myEx1 extends IOException{}
class myEx2 extends NullPointerException{}
class myEx3 extends ArithmeticException{}   

public class Bai1Chuyencoso10 {
        public static void main(String args[]) throws IOException{ 
            // Sử dụng Buffered đọc file.
            BufferedReader bufr = new BufferedReader(new FileReader("data1.txt")); 
            
            // Mảng lưu kết quả.
            char[] ch = new char[100];
            
            //Kiểm tra ngoại lệ    
            try {
                // Kiểm tra file trống.
                if( bufr.ready()==false )    throw new myEx1();// Bắt lỗi file trống 
                // Dữ liệu lấy từ file. 
                String dataout1 = bufr.readLine();
                String dataout2 = bufr.readLine();
                // Kiểm tra Xâu rỗng.
                if( dataout1==null || dataout2==null )  throw new myEx2();//Bắt lỗi xâu rỗng.
                // Đóng phương thức đọc file.
                bufr.close();
                // Chuyển String -> int
                int n = Integer.parseInt(dataout1);
                int b = Integer.parseInt(dataout2);
                
                // Kiểm tra điều kiện.
                if( n<0 || b<0 )    throw new myEx2();// Bắt lỗi điều kiện.
                
                System.out.println("Number n is in file : "+n);
                System.out.println("Number b is in file : "+b);
                
                //Chuyển số n hệ 10 sang hệ b.
                chuyenCoso10sangCosob(n, b, ch); 
            }catch(myEx1 e){
                System.out.println("Error! File is Empty.");
            }catch(myEx2 e){
                System.out.println("Error! String is empty.");
            }catch(NumberFormatException e){
                System.out.println("Error! Data styte is wrong.");
            }catch(myEx3 e){
                System.out.println("Error! It is negative.");
            }catch(Exception e){
                System.out.println("Error! Input again, please.");
            }                                             
        }
        static void chuyenCoso10sangCosob(int n,int b,char ch[]) throws IOException{
            // Sử dụng Buffered ghi file.
            BufferedWriter bufw = new BufferedWriter(new FileWriter("result1.txt"));                         
            int index = 0, du, m = n;
            while(m>0){
                du = m%b;
                if( du>=10 ) ch[ index ] =  (char)(65 + (du - 10));//Ép int -> char
                else         ch[ index ] =  (char)(48 + du);
                index++;
                m = m/b;
            }
            StringBuffer stb = new StringBuffer();
            stb = stb.append(ch, 0, index);// Chuyển mảng ký tự => StringBuffer.
            stb = stb.reverse();// Đảo ngược String.
            String str = stb.toString();
            // Ghi kết quả vào file.
            bufw.write("Number "+n+" from base 10 switch to base "+b+" : ");            
            bufw.write(str);     
            // Đóng phương thức ghi file.
            bufw.close();                
        }
}
